package offer;


@FunctionalInterface
public interface ReverseOnlyLetters {
    /**
     * 给你一个字符串 s ，根据下述规则反转字符串：
     *
     * 所有非英文字母保留在原有位置。
     * 所有英文字母（小写或大写）位置反转。
     * 返回反转后的 s 。
     *
     * @param s
     * @return
     */
    String reverseOnlyLetters(String s);
}

class ReverseOnlyLettersImpl1 implements ReverseOnlyLetters{

    static final String TEST_01 = "a-bC-dEf-ghIj";
    static final String ANSWER = "j-Ih-gfE-dCba";

    public static void main(String[] args) {
        new ReverseOnlyLettersImpl1().reverseOnlyLetters(TEST_01);
    }
    @Override
    public String reverseOnlyLetters(String s) {
        char[] ans = s.toCharArray();
        int left = 0, right = s.length() - 1;
        while (left < right){
            char charLeft = ans[left], charRight = ans[right];
            if(isCharacter(charLeft) && isCharacter(charRight)){
                ans[left] = charRight;
                ans[right] = charLeft;
                left++;
                right--;
            }else{
                if(!isCharacter(charLeft)){
                    left++;
                }
                if(!isCharacter(charRight)){
                    right--;
                }
            }
        }
        return new String(ans);
    }
    private boolean isCharacter(char c){
        if(c >= 'a' && c <= 'z'){
            return true;
        }else if(c >= 'A' && c <= 'Z'){
            return true;
        }else {
            return false;
        }
    }

}